Guía interactiva para aprender sintaxis MySQL paso a paso: creación de tablas, relaciones, consultas, filtros, JOINs, transacciones, índices y buenas prácticas profesionales usando ejemplos reales con empleados, departamentos y proyectos.
En phpMyAdmin o MySQL Workbench puedes escribir consultas SQL directamente.
-- Comentario corto
# Comentario alternativo
/* Comentario
multilínea */
CREATE DATABASE empresa_corporativa;
USE empresa_corporativa;
| Tipo | Uso |
|---|---|
| INT | Números enteros |
| DECIMAL(10,2) | Dinero |
| VARCHAR(80) | Texto corto |
| TEXT | Texto largo |
| DATE | Fechas |
| BOOLEAN | Verdadero/Falso |
CREATE TABLE empleados (
id INT AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(60) NOT NULL,
email VARCHAR(120) UNIQUE,
salario DECIMAL(10,2),
creado_en TIMESTAMP
DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE departamentos (
id INT AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(80)
);
CREATE TABLE proyectos (
id INT AUTO_INCREMENT PRIMARY KEY,
empleado_id INT NOT NULL,
nombre VARCHAR(100),
presupuesto DECIMAL(10,2),
FOREIGN KEY (empleado_id)
REFERENCES empleados(id)
);
FOREIGN KEY (empleado_id)
REFERENCES empleados(id)
ON DELETE CASCADE
Si se elimina un empleado, también se eliminan automáticamente sus proyectos.
INSERT INTO empleados
(nombre, email, salario)
VALUES
('Marta Ruiz',
'marta@empresa.com',
2800.00);
INSERT INTO departamentos
(nombre)
VALUES
('Finanzas'),
('Marketing'),
('Tecnología');
INSERT INTO empleados
VALUES
(NULL,
'Lucas Díaz',
'lucas@empresa.com',
3100.00,
DEFAULT);
SELECT * FROM empleados;
SELECT nombre, salario
FROM empleados;
SELECT nombre AS trabajador,
salario AS sueldo
FROM empleados;
SELECT *
FROM empleados
ORDER BY salario DESC;
SELECT *
FROM empleados
LIMIT 3;
SELECT *
FROM empleados
WHERE salario > 2500;
SELECT *
FROM empleados
WHERE salario >= 3000;
SELECT *
FROM empleados
WHERE salario > 2000
AND salario < 4000;
SELECT *
FROM empleados
WHERE NOT (salario = 0);
SELECT *
FROM empleados
WHERE email IS NULL;
SELECT *
FROM empleados
WHERE nombre LIKE 'Mar%';
SELECT *
FROM empleados
WHERE nombre LIKE '%Ruiz%';
SELECT *
FROM empleados
WHERE email LIKE '%@empresa.com';
SELECT *
FROM empleados
WHERE nombre LIKE 'L_cas';
UPDATE empleados
SET salario = 3500
WHERE id = 2;
DELETE FROM empleados
WHERE id = 4;
UPDATE empleados
SET salario = 0;
ALTER TABLE empleados
ADD telefono VARCHAR(20);
ALTER TABLE empleados
MODIFY telefono VARCHAR(30);
ALTER TABLE empleados
CHANGE telefono movil VARCHAR(30);
ALTER TABLE empleados
DROP COLUMN movil;
DROP TABLE proyectos;
SELECT
e.nombre,
d.nombre AS departamento
FROM empleados e
INNER JOIN departamentos d
ON e.id = d.id;
SELECT
e.nombre,
p.nombre AS proyecto
FROM empleados e
LEFT JOIN proyectos p
ON e.id = p.empleado_id;
| JOIN | Resultado |
|---|---|
| INNER | Solo coincidencias |
| LEFT | Incluye registros sin coincidencia |
SELECT COUNT(*)
AS total_empleados
FROM empleados;
SELECT SUM(salario)
AS suma_salarios
FROM empleados;
SELECT AVG(salario)
AS salario_medio
FROM empleados;
SELECT
departamento_id,
COUNT(*) AS empleados
FROM empleados
GROUP BY departamento_id;
SELECT
departamento_id,
COUNT(*) AS empleados
FROM empleados
GROUP BY departamento_id
HAVING COUNT(*) >= 3;
SELECT *
FROM empleados
WHERE salario >
(SELECT AVG(salario)
FROM empleados);
CREATE INDEX
idx_empleados_email
ON empleados(email);
SELECT *
FROM empleados
WHERE id = 2;
Primero prueba con SELECT y después ejecuta UPDATE o DELETE.